package 面试2025.字节跳动;

import java.util.ArrayDeque;
import java.util.Deque;

public class 计算器 {
    /**
     * 加号：将数字压入栈；
     * 减号：将数字的相反数压入栈；
     * 乘除号：计算数字与栈顶元素，并将栈顶元素替换为计算结果。
     */
    public int calculate(String s) {
        Deque<Integer> stack = new ArrayDeque<>();
        // 运算符初始化的值需要第一个if条件判断
        char c = '+';
        int num = 0;
        for (int i = 0;i < s.length();i++) {
            if (Character.isDigit(s.charAt(i))) {
                num = num * 10 + s.charAt(i) - '0';
            }
            //遍历到字符串末尾, 即认为是遍历到了数字末尾;因为最后一个数值可能有多个位
            if ((!Character.isDigit(s.charAt(i)) && s.charAt(i) != ' ') || i == s.length() - 1) {
                if (c == '+') {
                    stack.push(num);
                } else if (c == '-') {
                    stack.push(-num);
                } else if (c == '*') {
                    stack.push(stack.pop() * num);
                } else if (c == '/') {
                    stack.push(stack.pop() / num);
                }
                c = s.charAt(i);
                num = 0;
            }
        }
        int res = 0;
        while (!stack.isEmpty()) {
            res += stack.pop();
        }
        return res;
    }
}
